package leetcode;

import java.util.*;

public class LeetCodeMain80 {

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        while (in.hasNext()){
            int n=in.nextInt();
            int m=in.nextInt();
            int k=in.nextInt();
            int[][] dp=new int[n][m];
            for (int i = 0; i < n; i++) {
                dp[i][0]=1;
            }
            for (int i = 0; i < m; i++) {
                dp[0][i]=1;
            }
            for (int i = 1; i < n; i++) {
                for (int j = 1; j < m; j++) {
                    dp[i][j]=dp[i-1][j]+dp[i][j-1];
                }
            }
            if (k>=m*n){
                System.out.println(0);
            }else {
                double d=1-1.0*k/dp[n-1][m-1];
                System.out.println(d);
            }

        }
    }
    public static int max=0;
    public static void main1(String[] args) {
        Scanner in=new Scanner(System.in);
        while (in.hasNext()){
            int x=in.nextInt();
            int y=in.nextInt();
            in.nextLine();
            char[][] board=new char[x][y];
            int x1=-1;
            int y1=-1;
            int flag=0;
            for (int i = 0; i < x; i++) {
                board[i]=in.nextLine().toCharArray();
                for (int j = 0; j < y&&flag==0; j++) {
                    if (board[i][j]=='@'){
                        x1=i;
                        y1=j;
                        flag=1;
                        break;
                    }
                }
            }
            DFS1(board,x,y,x1,y1);
            System.out.println(max);
            max=0;
        }
    }
    public static void DFS1(char[][] board,int x,int y,int newX,int newY){
        if (newX<0||newY<0||newX>=x||newY>=y||board[newX][newY]=='#'){
            return;
        }
        board[newX][newY]='#';
        max++;
        DFS1(board, x, y, newX+1, newY);
        DFS1(board, x, y, newX-1, newY);
        DFS1(board, x, y, newX, newY+1);
        DFS1(board, x, y, newX, newY-1);
    }
    public int count=0;
    public boolean exist(char[][] board, String word) {
        int x=board.length;
        int y=board[0].length;
        boolean[][] vis=new boolean[x][y];
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                boolean flag=DFS(board,vis,word,i,j,0);
                if (flag){
                    return true;
                }
            }
        }
        return false;
    }
    public int[][] arrs ={{0,1},{0,-1},{1,0},{-1,0}};
    public boolean DFS(char[][] board,boolean[][] vis,String word,int i,int j,int k){
        if (board[i][j]!=word.charAt(k)){
            return false;
        }else if (k==word.length()-1) {
            return true;
        }
        vis[i][j]=true;
        boolean res=false;
        for (int[] arr: arrs) {
            int x=i+arr[0];
            int y=j+arr[1];
            if (x>=0&&y>=0&&x<board.length&&y<board[0].length){
                if (!vis[x][y]){
                    boolean flag=DFS(board,vis,word,x,y,k+1);
                    if (flag){
                        res=true;
                        break;
                    }
                }
            }
        }
        vis[i][j]=false;
        return res;
    }
}
